// 认证工具类
import { apiUtils } from './api.js';

/**
 * 路由守卫配置
 */
export const routeGuard = {
  // 需要登录的页面
  requireAuth: [
    '/pages/index/index',
    '/pages/add/add',
    '/pages/statistics/statistics',
    '/pages/mine/mine'
  ],
  
  // 不需要登录的页面
  publicPages: [
    '/pages/login/login'
  ],
  
  // 检查页面是否需要认证
  needAuth(path) {
    return this.requireAuth.includes(path);
  },
  
  // 检查页面是否为公开页面
  isPublicPage(path) {
    return this.publicPages.includes(path);
  }
};

/**
 * 认证状态管理
 */
export const authManager = {
  // 检查是否已登录
  isLoggedIn() {
    return apiUtils.isLoggedIn();
  },
  
  // 获取用户信息
  getUserInfo() {
    return uni.getStorageSync('userInfo');
  },
  
  // 设置用户信息
  setUserInfo(userInfo) {
    uni.setStorageSync('userInfo', userInfo);
  },
  
  // 清除认证信息
  clearAuth() {
    apiUtils.clearToken();
  },

  // 退出登录
  async logout() {
    try {
      // 调用后端退出接口
      await userAPI.logout();
    } catch (error) {
      console.warn('退出登录接口调用失败:', error);
    } finally {
      // 无论后端是否成功，都清除本地认证信息
      this.clearAuth();
      // 跳转到登录页
      this.redirectToLogin();
    }
  },
  
  // 跳转到登录页
  redirectToLogin() {
    uni.reLaunch({
      url: '/pages/login/login'
    });
  },
  
  // 跳转到首页
  redirectToHome() {
    uni.reLaunch({
      url: '/pages/index/index'
    });
  }
};

/**
 * 路由拦截器
 */
export const routerInterceptor = {
  // 页面跳转前拦截
  beforeRoute(to, from) {
    console.log('路由跳转:', from, '->', to);
    
    // 检查是否需要认证
    if (routeGuard.needAuth(to)) {
      if (!authManager.isLoggedIn()) {
        console.log('需要登录，跳转到登录页');
        authManager.redirectToLogin();
        return false;
      }
    }
    
    // 如果已登录且访问登录页，跳转到首页
    if (to === '/pages/login/login' && authManager.isLoggedIn()) {
      console.log('已登录，跳转到首页');
      authManager.redirectToHome();
      return false;
    }
    
    return true;
  },
  
  // 页面跳转后处理
  afterRoute(to, from) {
    console.log('路由跳转完成:', from, '->', to);
  }
};

/**
 * 应用启动时的认证检查
 */
export const initAuth = () => {
  // 检查token是否有效
  if (authManager.isLoggedIn()) {
    const token = apiUtils.getToken();
    if (!token) {
      authManager.clearAuth();
      return;
    }
    
    // 这里可以添加token有效性验证
    // 例如调用后端接口验证token
    console.log('用户已登录');
  } else {
    console.log('用户未登录');
  }
};

/**
 * 自动登录检查
 */
export const checkAutoLogin = () => {
  if (authManager.isLoggedIn()) {
    const userInfo = authManager.getUserInfo();
    if (userInfo) {
      console.log('自动登录成功:', userInfo.username);
      return true;
    }
  }
  return false;
};

export default {
  routeGuard,
  authManager,
  routerInterceptor,
  initAuth,
  checkAutoLogin
};
